package br.com.mensageiro.apresentacao.managedbean;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

import javax.faces.bean.ManagedBean;

import org.primefaces.event.FileUploadEvent;
import org.primefaces.model.UploadedFile;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;

import br.com.mensageiro.negocio.entidade.Arquivo;
import br.com.mensageiro.negocio.entidade.Mensagem;
import br.com.mensageiro.negocio.servico.IArquivoService;
import br.com.mensageiro.negocio.servico.IGenericService;
import br.com.mensageiro.utils.ArquivoUtils;

@ManagedBean(name = "arquivoMB")
@Scope("session")
public class ArquivoMB extends GenericManagedBeanCRUD<Arquivo> {
	@Autowired
	private IArquivoService arquivoService;

	@Autowired
	private ArquivoUtils arquivoUtils;

	private List<File> listaArquivos;

	public void manipularFileUpload(FileUploadEvent event) {
		try {
			UploadedFile uploadedFile = event.getFile();
			InputStream in = new BufferedInputStream(
					uploadedFile.getInputstream());
			File arquivo = new File("C:\\Users\\Robson\\Documents\\" + uploadedFile.getFileName());
			FileOutputStream fout = new FileOutputStream(arquivo);
			while (in.available() != 0) {
				fout.write(in.read());
			}
			fout.close();
			listaArquivos.add(arquivo);
		} catch (Exception ex) {
			ex.printStackTrace();
		}
	}

	public List<Arquivo> montaListaArquivos(Mensagem mensagem) {
		List<Arquivo> arquivos = new ArrayList<Arquivo>();
		for (File file : listaArquivos) {
			Arquivo arquivo = new Arquivo();
			arquivo.setArquivo(arquivoUtils.fileTobyte(file));
			arquivo.setNome(file.getName());
			arquivo.setMensagem(mensagem);
			arquivos.add(arquivo);
		}
		return arquivos;
	}

	public List<File> getListaArquivos() {
		System.out.println("REtoprn " + listaArquivos.size());
		return listaArquivos;
	}

	public void setListaArquivos(List<File> listaArquivos) {
		this.listaArquivos = listaArquivos;
	}

	@Override
	public IGenericService<Arquivo> getService() {
		return arquivoService;
	}

	public ArquivoMB(Class<Arquivo> classBean) {
		super(classBean);
	}

	public ArquivoMB() {
		super(Arquivo.class);
		listaArquivos = new ArrayList<File>();
	}
}
